#ifndef		__LENSDATA_H_
#define		__LENSDATA_H_
//#include "baseDef.h"
#include "sw_type.h"

#define 	ZOOM_MIN_STEP			4	//电机行走的最小步数
#define 	FOCUS_MIN_STEP			4	//电机行走的最小步数
#define 	ZOOM_MAX_POS_ADD		4	//zoom最大值延长
#define 	MOTOR_SHIFT_STEP		28
#define 	ZOOM_SPEED_SECTION		12	//镜头变焦步长分段
#define 	ZOOM_SPEED_LEVEL		5	//镜头变焦速度等级
#define 	NEAR_LIMIT_LEVEL		9	//最小聚焦距离等级
#define		IPDEMO_ZOOM_SPEED_LEVEL	3	//球机变焦速度的等级
#define		IPDEMO_MAX_ZOOM_RATE	500	//最大的变焦倍率扩大10倍(50*10)

/*帧率的宏定义*/
#define FRAME_12D5 12
#define FRAME_15 15
#define FRAME_25 25
#define FRAME_20 20
#define FRAME_30 30
#define FRAME_50 50
#define FRAME_60 60
#define FRAME_100 100
#define FRAME_120 120


/*表示zoom,focus,zoompi,focuspi,hall,pwm等变量的极性*/
#define POSITIVE 1		//正极，正向，正反馈，数据不翻转
#define NEGATIVE 0		//负极，负向，负反馈，数据需翻转

#define ENABLE 1		//支持，使能
#define DISENABLE 0		//不支持，不使能

typedef enum
{
	AGING_TEST_ORDER = 0,	//顺序测试WT IRIS ICR
	AGING_TEST_THREAD,		//并行测试
	
}AGING_TEST_METHOD;

extern SW_UINT16 FocusLimitFlag;
extern SW_UINT16 ZoomLimitCnt;
//extern SW_UINT16 PrintFlag ;
extern SW_INT32 FocusLimit ;
extern SW_INT32 FocusMargin ;

/*T2测试基本参数*/
typedef struct
{
	s32 CurveTestVer;//曲线测试版本	1**  多点两条曲线; 2**  少点两条曲线; 3**  少点inf一条曲线大倍率镜头; 4**  少点一条inf曲线小倍率镜头
	u8 CurNum;//曲线测试，0-不测，1一条无穷远，2两条曲线
	u8 CurTest1m5_2m;	//测试两条的话第一条是测试0-1.5m, 1-2m	
	u8 HalfFuzzy;//是否测试半边糊和空回
	u8 IsIrisTest;//是否测试光圈，0 不测，1测试		
}LENS_TEST_BASE_PAR;



/*镜头测试数据结构体，定义测试所需数据的相关变量*/
typedef struct
{
	int SpecTestNum; // T2要测得点数
	int *SpecZoomCoord; // T2 要测得的点对应的ZOOM坐标
	int *PredictCurveDif1M5; //  1m5 T2要测得下一个点FOCUS坐标与当前坐标的估计距离
	int *PredictCurveDifInf;  //  inf T2要测得下一个点FOCUS坐标与当前坐标的估计距离
	/*多点变量*/
	int MultiPointSpecTestNum; // T2要测得点数
	int *MultiPointSpecZoomCoord; // T2 要测得的点对应的ZOOM坐标
	int *MultiPointPredictCurveDif1M5; //  1m5 T2要测得下一个点FOCUS坐标与当前坐标的估计距离
	int *MultiPointPredictCurveDifInf;	//	inf T2要测得下一个点FOCUS坐标与当前坐标的估计距离
	
	int *Zoom2Focus; // GetFocusCurve 曲线分段的各坐标(共DevSpecInfo.CurveNum)
	float *PredictCurveRatio3M; // 1m5	inf估计3m曲线比率
	float *PredictCurveRatio6M;  // 1m5  inf估计6m曲线比率
	float *PredictCurveRatio10M; // 1m5  inf估计10m曲线比率
	float *PredictCurveRatio20M;  // 1m5  inf估计20m曲线比率
	short *Curve1m5BasedPoints;   //m 1m5曲线的基准点 
	short *CurveInfBasedPoints;   //m Inf曲线的基准点 
	int *BasedPointsIndex;	//基准点的索引	 heping
	int *Curve1m5RecitifyDiff;	// 1m5校正偏差
	int *CurveInfRecitifyDiff;	// 无穷远校正偏差
	int *Curve1nf2Curve1m5Offset;	//由测得的无穷远数据计算1M5数据，测试一条曲线的镜头使用

}LENS_TEST_DATA; 


/*镜头一条曲线测试数据结构体，定义所需数据的相关变量*/
typedef struct
{
	int testNum;							//曲线测试点数
	int	FitAllNum;							//要拟合的所有点 的数量
	
	int	*CurveTestIndex;					// 参考点的zoom坐标(少点6个，多点不限<100)
	int *CurveTableIndex;					// 要拟合的所有zoom坐标数组 
	
	short *CurveTableInfVal;				// 实际的理论inf曲线表
	short *CurveTable20MVal;				// ...
	short *CurveTable10MVal;				// ...
	short *CurveTable06MVal;				// 实际的理论6M曲线表
	short *CurveTable03MVal;				// 实际的理论3M曲线表
	short *CurveTable1M5Val;				// 实际的理论1M5曲线表
	
	short *Curve1M5Comp;					// 1M5 曲线的补偿
	short *CurveInfComp;					// Inf 曲线的补偿
	
	short Cor_Par1;						//畸变函数的矫正参数1
	short Cor_Par2;						//畸变函数的矫正参数2
	int *Zoom2Focus; 					// GetFocusCurve 曲线分段的各坐标(共DevSpecInfo.CurveNum)
}LENS_ONE_CURVE_DATA; 

/*镜头一条视场角曲线测试数据结构体，定义所需数据的相关变量*/
typedef struct
{
	int FovTestNum;							//曲线测试点数
	int	FovFitAllNum;						//要拟合的所有点 的数量
	int FovVersion;							//版本，初始版本定义为101
	
	int	*FovCurveTestIndex;					// 参考点的zoom坐标(少点6个，多点不限<100)
	int *FovCurveZoomIndex;				    // 要拟合的所有zoom坐标数组
	int *FovCurveFocusIndex;				// 要拟合的所有Focus坐标数组 
	
	int *FovCurveTableInfVal;				// 实际的理论inf曲线表
	int *FovCurveTable20MVal;				// ...
	int *FovCurveTable10MVal;				// ...
	int *FovCurveTable06MVal;				// 实际的理论6M曲线表
	int *FovCurveTable03MVal;				// 实际的理论3M曲线表
	int *FovCurveTable1M5Val;				// 实际的理论1M5曲线表
	int *FovCurveTableInfTrueVal;			// 实际的理论inf曲线表
}LENS_FOV_CURVE_DATA;



typedef struct 
{
	SW_INT16 zoom_step;
	SW_INT16 focus_step;
	SW_INT32 wt_init_times;
	SW_INT16 iris_step;
	SW_INT16 icr_step;
	SW_UINT8 res[8];
}LENS_AGING_TEST_PARAM;

typedef struct 
{
	SW_INT16 zoom_empty_step;
	SW_INT16 focus_empty_step;
	SW_INT16 zoom_lost_step;
	SW_INT16 focus_lost_step;
	SW_INT32 zf_cnt;
	SW_INT32 zf_errorcnt;	
	
	SW_INT16 iris_empty_step;
	SW_INT16 iris_lost_step;
	SW_INT32 iris_cnt;
	SW_INT32 iris_errorcnt;
	
	SW_INT16 icr_empty_step;
	SW_INT16 icr_lost_step;
	SW_INT32 icr_cnt;
	SW_INT32 icr_errorcnt;

	SW_UINT8	res[8];
}LENS_AGING_TEST_RESULT;

typedef struct 
{
	SW_UINT8 zf;
	SW_UINT8 iris;
	SW_UINT8 icr;
	SW_UINT8 method;
	SW_UINT8 runflag;
	SW_UINT8 zflost_support;
	SW_UINT8 irislost_support;
	SW_UINT8 icrlost_support;
	SW_UINT8 res[4];

}LENS_AGING_TEST_CAPA;

typedef struct 
{
	LENS_AGING_TEST_CAPA capa;
	LENS_AGING_TEST_PARAM param;
	LENS_AGING_TEST_RESULT result;
}LENS_AGING_TEST;

/*镜头曲线测试补丁数据结构体*/
typedef struct LENS_CURVETEST_PATCH_DATE
{
	//曲线矫正光圈数据
	SW_INT32 ZoomIrisNum;
	SW_INT32 *ZoomIrisSection;

	// PI偏差计算的2个点位
	SW_INT32 PIOffsetPos1Index;
	SW_INT32 PIOffsetPos2Index;
	
	SW_INT32 s32Reserve[18];			//预留数据s32
}LENS_CURVETEST_PATCH_DATE; 



#endif

